﻿<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Permissao extends Controller_Restrito_Template {

	public function action_index()
	{
		$view = new View('permissao/index');
		
		$view->permissoes = ORM::factory('permissao')
			->order_by('controlador')
			->find_all();
		
		$this->template->body = $view;
	}
	
	public function action_cadastrar()
	{
		$view = new View('permissao/cadastrar');
		
		if(isset($_POST['cadastrar'])):
		
			$post = Validation::factory($_POST);
			$post->rule('descricao', 'not_empty')
				//->rule('descricao', 'regex', array(':value', '/^[a-zA-Z. ]++$/iD'))
				->rule('controlador', 'not_empty')
				//->rule('controlador', 'regex', array(':value', '/^[a-zA-Z]++$/iD'))
				->rule('acao', 'not_empty')
				//->rule('controlador', 'regex', array(':value', '/^[a-zA-Z]++$/iD'))
				;
			
			if($post->check())
			{
				$permissao = ORM::factory('permissao');
				$permissao->descricao = $post['descricao'];
				$permissao->controlador = $post['controlador'];
				$permissao->acao = $post['acao'];
				
				if(! $permissao->exists())
				{
					if($permissao->save())
					{
						Flash::message('success', 'Permissão salva com sucesso!');
					}
					else {
						Flash::message('error', 'Falha ao salvar a Permissão!');
					}
				}
				else {
					Flash::message('error', 'Permissão já existe!');
				}
			}
			else {
				Flash::message('error', 'Confira os dados da Permissão!');
			}
		endif;
		
		$view->permissoes = ORM::factory('permissao')
			->order_by('controlador')
			->find_all();
		
		$this->template->body = $view;
	}
	
	public function action_editar()
	{
		$view = new View('permissao/editar');
		
		$permissao = ORM::factory('permissao', $this->request->param('id'));
		
		if(isset($_POST['editar'])):
		
			$post = Validation::factory($_POST);
			$post->rule('descricao', 'not_empty')
				->rule('descricao', 'regex', array(':value', '/^[a-zA-Z. ]++$/iD'))
				->rule('controlador', 'not_empty')
				->rule('controlador', 'regex', array(':value', '/^[a-zA-Z]++$/iD'))
				->rule('acao', 'not_empty')
				->rule('controlador', 'regex', array(':value', '/^[a-zA-Z]++$/iD'));
			
			if($post->check())
			{
				$permissao->descricao = $post['descricao'];
				$permissao->controlador = $post['controlador'];
				$permissao->acao = $post['acao'];
				
				if($permissao->save())
				{
					Flash::message('success', 'Permissão salva com sucesso!');
				}
				else {
					Flash::message('error', 'Falha ao alterar a Permissão!');
				}
				
				$this->request->redirect('permissao/index');
			}
			else {
				Flash::message('error', 'Confira os dados da Permissão');
			}
		endif;
		
		$view->permissao = $permissao;
		$view->permissoes = ORM::factory('permissao')
			->order_by('controlador')
			->find_all();
		
		$this->template->body = $view;
	}
	
	public function action_apagar()
	{
		//identifica a permissão
		$permissao = ORM::factory('permissao', $this->request->param('id'));
		
		if($permissao->loaded())
		{
			//identifica os usuários que tem a permissão
			$usuarios = $permissao->usuarios->find_all();
			//remove a permissão dos usuários
			foreach($usuarios as $usuario):
				$usuario->remove('permissoes', $permissao);
			endforeach;
		
			if($permissao->delete())
			{
				Flash::message('success', 'A Permissão foi apagada com sucesso!');
			}
			else {
				Flash::message('error', 'Ocorreu um erro ao apagar a Permissão');
			}
		}
		else {
			Flash::message('error', 'A Permissão é inválida!');
		}
		
		$this->request->redirect('permissao/index');
	}

} // End Usuario
